#include <iostream>
#include "asio.hpp"
using asio::ip::udp;

std::string make_daytime_string()
{
    time_t now = time(0);
    return ctime(&now);
}

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        std::cerr << "Usage: server <port>" << std::endl;
        return 1;
    }

    try
    {
        asio::io_context io_context;
        udp::socket socket(io_context, udp::endpoint(udp::v4(), atoi(argv[1])));

        for(;;)
        {
            std::array<char, 1> recv_buf;
            udp::endpoint remote_endpoint;
            asio::error_code error;
            socket.receive_from(asio::buffer(recv_buf), remote_endpoint);
            std::string message = make_daytime_string();
            asio::error_code ignored_error;
            socket.send_to(asio::buffer(message), remote_endpoint, 0, ignored_error);
        }
    }
    catch(std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
    return 0;
}